package leetcode;

import basic.datastruct.二叉树.TreeNode;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;

/**
 * @创建人 MBY381
 * @创建时间 2022/4/17 14:06
 * @描述 层序遍历
 */
public class Solution_jz032 {
    public List<List<Integer>> levelOrder(TreeNode root){
        List<List<Integer>> value = new ArrayList<>();//存储到的最终结果
        if (root == null)
            return value;
        int index = 0;//判断
        Queue<TreeNode> queue = new ArrayDeque<>();
        queue.add(root);
        // int tag=0;
        while (!queue.isEmpty()) {
            List<Integer> va = new ArrayList<>();//临时 用于存储到value中
            int len = queue.size();//当前层节点的数量
            // if(tag%2==1){
            //     reverseQueue(queue);
            // }
            // tag++;
            for (int i = 0; i < len; i++) {
                TreeNode node = queue.poll();
                if (index % 2 == 0)//根据奇偶 选择添加策略
                    va.add(node.val);
                else
                    va.add(0, node.val);
                if (node.left != null)
                    queue.add(node.left);
                if (node.right != null)
                    queue.add(node.right);
            }
            value.add(va);
            index++;
        }
        return value;
    }
    // public void reverseQueue(Queue<TreeNode> queue){
    //     int len=queue.size();
    //     Stack<TreeNode> stack=new Stack<>();
    //     for(int i=0;i<len;i++){
    //         stack.push(queue.poll());
    //     }
    //     for(int i=0;i<len;i++){
    //         queue.add(stack.pop());
    //     }
    //     System.out.println("反序了一次");
    // }
}
